import numpy as np
import pandas as pd
import os

# 设置随机种子以确保结果可复现
np.random.seed(42)


def generate_sample_data(n_students=200):
    """生成模拟学生数据"""
    # 生成学习成果特征
    avg_score = np.random.normal(70, 15, n_students).clip(0, 100)  # 平均分
    score_std = np.random.normal(10, 5, n_students).clip(1, 30)  # 成绩标准差(稳定性)
    progress_rate = np.random.normal(0.05, 0.1, n_students).clip(-0.3, 0.5)  # 进步率

    # 生成学习行为特征
    hw_completion = np.random.beta(4, 3, n_students)  # 作业完成率
    interaction = np.random.beta(2, 3, n_students)  # 课堂互动频率
    study_duration = np.random.beta(3, 3, n_students)  # 学习时长

    # 创建DataFrame
    data = pd.DataFrame({
        '学生ID': [f'S{i + 1:03d}' for i in range(n_students)],  # 添加学生ID
        '平均分': avg_score,
        '成绩标准差': score_std,  # 保留原始标准差，后续处理会转换为稳定性
        '进步率': progress_rate,
        '作业完成率': hw_completion,
        '互动频率': interaction,
        '学习时长': study_duration
    })

    return data


def export_data_to_csv(data, filename='student_data.csv'):
    """将数据导出为CSV文件"""
    data.to_csv(filename, index=False, encoding='utf-8-sig')
    print(f"模拟数据已导出至 {filename}")


if __name__ == "__main__":
    # 设置环境变量以避免警告
    os.environ['OMP_NUM_THREADS'] = '1'

    # 生成数据
    data = generate_sample_data(n_students=200)

    # 导出数据
    export_data_to_csv(data)